<!DOCTYPE html>
<html>

<head>
	<meta charset="utf-8">
	<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
	<meta name="theme-color" content="#33474d">
	<title>nfs部署和优化 | 失落的乐章</title>
	<link rel="stylesheet" href="/css/style.css" />
	
      <link rel="alternate" href="/atom.xml" title="失落的乐章" type="application/atom+xml">
    
</head>

<body>

	<header class="header">
		<nav class="header__nav">
			
				<a href="/archives" class="header__link">Archive</a>
			
				<a href="/tags" class="header__link">Tags</a>
			
				<a href="/atom.xml" class="header__link">RSS</a>
			
		</nav>
		<h1 class="header__title"><a href="/">失落的乐章</a></h1>
		<h2 class="header__subtitle">技术面前，永远都是学生。</h2>
	</header>

	<main>
		<article>
	
		<h1>nfs部署和优化</h1>
	
	<div class="article__infos">
		<span class="article__date">2017-10-12</span><br />
		
		
			<span class="article__tags">
			  	<a class="article__tag-link" href="/tags/NFS/">NFS</a>
			</span>
		
	</div>

	

	
		<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;NFS = network file system</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;NFS服务比较常用，用于在网络上共享储存。</p>
<h2 id="服务端配置-NFS"><a href="#服务端配置-NFS" class="headerlink" title="服务端配置 NFS"></a>服务端配置 NFS</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;centos 上使用 NFS 服务，需要安装两个包（nfs-utils 和 rpcbind），不过当使用 yum 安装 nfs-utils 时会把 rpcbind 一起安装上</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># yum install -y nfs-utils rpcbind</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在以前的 centos 版本中，是需要安装 portmap 包的，从 centos 6 开始，就改为rpcbind了。NFS 配置起来很简单，只需要编辑配置文件 /etc/exports 即可。先创建一个简单的 NFS 服务器。 </p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># vim /etc/exports</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;写入一下内容：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">/home/ 192.168.0.0/24(rw,sync,all_squash,anonuid=501,anongid=501)</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这个配置文件就这样简单一行。共分为三部分，第一部分就是本地要共享出去的目录，第二部分为允许访问的主机（可以是一个 IP 也可以是一个 IP 段），第三部分就是小括号里面的，为一些权限选项。</p>
<ul>
<li><p>rw： 读写；</p>
</li>
<li><p>ro： 只读；</p>
</li>
<li><p>sync： 同步模式，内存中数据时时写入磁盘；</p>
</li>
<li><p>async： 不同步，把内存中数据定期写入磁盘中；</p>
</li>
<li><p>no_root_squash： 加上这个选项后，root 用户就会对共享的目录拥有至高的权限控制，就像是对本机的目录操作一样。但这样不安全，不建议使用。</p>
</li>
<li><p>roo_squash： 和上面的选项对应，root 用户对共享目录权限不高，只有普通用户的权限，即限制了 root 。</p>
</li>
<li><p>all_squash： 不管使用 NFS 的用户是谁，他的身份都会被限定成一个指定的普通用户身份。</p>
</li>
<li><p>anonuid/anongid： 要和root_squash 以及 all_squash一同使用，用于指定使用 NFS 的用户限定后的 uid 和 gid ，前提是本机的 /etc/passwd 存在这个 uid 和 gid 。</p>
</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;现在分析一下刚才配置的那个 /etc/exports 文件。其中共享的目录为 /home ，信任的主机为 192.168.0.0/24 这个网段，权限为读写，同步，限定所有使用者，并且限定 uid 和 gid 都为501.</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;编辑好配置文件后，就该启动服务了 ：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div><div class="line">4</div><div class="line">5</div><div class="line">6</div><div class="line">7</div></pre></td><td class="code"><pre><div class="line">[root@localhost ~]<span class="comment"># service rpcbind start</span></div><div class="line">正在启动 rpcbind： [确定]</div><div class="line">[root@localhost ~]<span class="comment"># service nfs start</span></div><div class="line">启动 NFS 服务： [确定]</div><div class="line">启动 NFS mountd： [确定]</div><div class="line">启动 NFS 守护进程： [确定]</div><div class="line">正在启动 RPC idmapd： [确定]</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在启动服务以前，需要先启动 rpcbind 服务，以前的 centos 老版本中并不是 rpcbind ，而是叫做 portmap。</p>
<h2 id="客户端上挂载-NFS"><a href="#客户端上挂载-NFS" class="headerlink" title="客户端上挂载 NFS"></a>客户端上挂载 NFS</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;客户端挂载 NFS 以前，需要先查看服务端都共享了哪些目录，需要使用 showmount 命令，但这个命令是 nfs-utils 这个包带的，所以同样需要安装 nfs-utils</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@192 ~]<span class="comment"># yum install -y nfs-utils</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;现在可以查看服务器端都共享了那些目录了</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">[root@192 ~]<span class="comment"># showmount -e 192.168.0.73</span></div><div class="line">Export list <span class="keyword">for</span> 192.168.0.73:</div><div class="line">/home 192.168.0.0/24</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;说明：其中 192.168.0.73 为 NFS 服务端 IP。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;可以看到在服务器端配置的 nfs 共享信息。showmount -e 加 ip 就可以查看 nfs 的共享情况，可以看到 192.168.0.73 的共享目录为 /home ，信任主机为 192.168.0.0/24 这个网段。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;下面的命令是在客户端上挂载 nfs ：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@192 ~]<span class="comment"># mount -t nfs -o nfsvers=3 192.168.0.73:/home/ /mnt/</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;说明： -o 后面跟挂载选项，如果不加 -o nfsvers=3 则在挂载目录下的文件属主和组都是 nobody，如果指定 nfsers=3 则显示501，所以尽量加上这个选项，避免权限混乱。</p>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/nfs%E9%83%A8%E7%BD%B2%E5%92%8C%E4%BC%98%E5%8C%96/01.png?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;用 df -h 命令可以查看到多出来的一个 /mnt 分区，它就是 NFS 共享的目录了。</p>
<h2 id="命令-exportfs"><a href="#命令-exportfs" class="headerlink" title="命令 exportfs"></a>命令 exportfs</h2><p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;还有一个常用的命令就是 exportfs ，它的常用选项为 [-aruv]</p>
<ul>
<li>-a： 全部挂载或者卸载；</li>
<li>-r： 重新挂载；</li>
<li>-u： 卸载某一个目录；</li>
<li>-v： 显示共享的目录</li>
</ul>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;使用 exportfs 命令，当改变 /etc/exports 配置文件后，不用重启 nfs 服务直接用这个 exportfs 即可。</p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;下面先更改服务端的配置：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@192 ~]<span class="comment"># vim /etc/exports</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;增加一行：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">/tmp/ 192.168.0.0/24(rw,sync,no_root_squash)</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;然后服务端上执行命令：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">[root@192 ~]<span class="comment"># exportfs -arv</span></div><div class="line">exporting 192.168.0.0/24:/tmp</div><div class="line">exporting 192.168.0.0/24:/home</div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;在之前的命令中用到了 mount 命令来挂载 nfs ，其实 mount 这个 nfs 服务还是有些说法的。首先是用 -t nfs 来指定挂载的类型为 nfs 另外在使用 nfs 时，常用一个选项就是 -o nolock 了，即在挂载 nfs 服务时，不加锁。在客户端上执行：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div></pre></td><td class="code"><pre><div class="line">[root@192 ~]<span class="comment"># mkdir /test</span></div><div class="line">[root@192 ~]<span class="comment"># mount -t nfs -o nolock 192.168.0.73:/tmp/ /test/</span></div></pre></td></tr></table></figure>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;还可以把要挂载的 nfs 目录写到 client 上的 /etc/fstab 文件中，挂载时只需要执行 mount -a 即可。在 /etc/fstab 里加一行：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div><div class="line">2</div><div class="line">3</div></pre></td><td class="code"><pre><div class="line">[root@192 ~]<span class="comment"># vim /etc/fstab</span></div><div class="line"></div><div class="line">1192.168.0.73:/tmp/     /<span class="built_in">test</span>     nfs     nolock     0 0</div></pre></td></tr></table></figure>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/nfs%E9%83%A8%E7%BD%B2%E5%92%8C%E4%BC%98%E5%8C%96/02.png?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;因为刚挂载过，所以先卸载：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@192 ~]<span class="comment"># umount /test/</span></div></pre></td></tr></table></figure>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/nfs%E9%83%A8%E7%BD%B2%E5%92%8C%E4%BC%98%E5%8C%96/03.png?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;然后执行：</p>
<figure class="highlight bash"><table><tr><td class="gutter"><pre><div class="line">1</div></pre></td><td class="code"><pre><div class="line">[root@192 ~]<span class="comment"># mount -a</span></div></pre></td></tr></table></figure>
<p><figure class="figure"><img src="https://github.com/hcldirgit/image/blob/master/nfs%E9%83%A8%E7%BD%B2%E5%92%8C%E4%BC%98%E5%8C%96/04.png?raw=true" alt=""></figure></p>
<p>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;这样也可以挂载上，而且以后开机会自动挂载。</p>

	

	
		<span class="different-posts"><a href="/2017/10/12/NFS/1. nfs部署和优化/" onclick="window.history.go(-1); return false;">⬅️ Go back </a></span>

	

</article>

	</main>

	<footer class="footer">
	<div class="footer-content">
		
	      <div class="footer__element">
	<p>Hi there, <br />welcome to my Blog glad you found it. Have a look around, will you?</p>
</div>

	    
	      <div class="footer__element">
	<h5>Check out</h5>
	<ul class="footer-links">
		<li class="footer-links__link"><a href="/archives">Archive</a></li>
		
		  <li class="footer-links__link"><a href="/atom.xml">RSS</a></li>
	    
		<li class="footer-links__link"><a href="/about">about page</a></li>
		<li class="footer-links__link"><a href="/tags">Tags</a></li>
		<li class="footer-links__link"><a href="/categories">Categories</a></li>
	</ul>
</div>

	    

		<div class="footer-credit">
			<span>© 2017 失落的乐章 | Powered by <a href="https://hexo.io/">Hexo</a> | Theme <a href="https://github.com/HoverBaum/meilidu-hexo">MeiliDu</a></span>
		</div>

	</div>


</footer>



</body>

</html>
